It has become common practice to fit certain vehicles with one or more "memory" mirrors, i.e., a mirror for which one or more desired positions are encoded (stored) in memory and then "remembered" (retrieved from memory). Memory mirrors provide automatic repositioning of a vehicle mirror, typically initiated by a primary driver, when the mirror has been moved out of its desired position by, say, a second driver. For example, first the primary driver sets a desired position for a mirror and stores the setting. Then, the second driver manually changes the mirror position. When the primary driver returns and pushes a memory push-button switch, the mirror automatically returns to its original (memory) position.
Typically, memory mirror systems comprise known electronic hardware, e.g., two motors, one for up/down mirror movement about a "horizontal" axis and another for left/right mirror movement about a "vertical" axis, each motor having analog voltage position feedback, driven by an electronic controller comprising: a 4-bit micro-controller, motor drivers, analog-to-digital (A/D) converters, and "on chip" memory, such as that described in U.S. Pat. No. 4,929,878. Mirror movement is typically achieved by mounting a mirror to a fixed position ball joint, at the center of the mirror, thereby allowing mirror movement in all directions, and pushing/pulling an off-center point on the mirror using a motor connected to the mirror by a "rack and pinion" arrangement. The "rack and pinion" converts clockwise or counter-clockwise (CW/CCW) rotational motion of the motor output shaft into translational motion of a rod (or "rack") using a gear mounted to the motor output shaft and a rod having notches which mesh with the gear and allow the rod to be driven thereby. For example, for left/right mirror movement, a first motor drives a first rod having one end attached to the mirror at a point along a horizontal line, a known distance to the right or left of the center of the mirror. For up/down mirror movement, a second motor drives a second rod having one end attached to the mirror at a point along a vertical line (perpendicular to the horizontal line), a known distance above or below the center of the mirror. The position of the mirror is typically described by two coordinates, one for the position of each rod. Position sensing of each rod (i.e., position feedback) is provided by a potentiometer, having a wiper shaft geared to the motor output shaft, which provides a variable voltage to the electronic controller.
The motors are typically bidirectional (CW or CCW), DC, constant speed motors, and are operated either individually or together, having equal speeds when turned ON. When a motor is turned ON it may be run either CW or CCW, which translates into left/right mirror movement by one motor and up/down mirror movement by the other motor (as described hereinbefore). Thus, the mirror has eight degrees of freedom; up, down, right, left, up left 45.degree., up right 45.degree., down left 45.degree., down right 45.degree..
A memory mirror system includes an algorithm for driving the mirror from a starting position to a previously stored (memory) position. Previous algorithms, e.g., the algorithm described in the aforementioned patent, start with both motors running (i.e., motion at a 45.degree. angle from the present position). Viewing the starting mirror position as the origin (center) of an orthogonal coordinate system, the aforementioned algorithm first drives the mirror at 45.degree. in the quadrant where the destination is located until the mirror position is along either a horizontal or vertical line from the destination, then turns OFF the appropriate motor allowing the remaining running motor to bring the mirror to the desired position (destination).
Memory mirrors are typically mounted within a cavity or housing that provides a limited amount of mirror movement. If the mirror hits a boundary (also known as a stop or obstruction) the mirror travel stops. The mirror movement boundaries are typically a known convex shape having no concave edges, such as a circle, an oval, or a parallelogram. Also, the mirror is typically a known shape such as a circle, an oval, a half oval, or a parallelogram but is not necessarily the same shape as the boundaries it is mounted within. Using existing mirror positioning algorithms, it is possible to hit a boundary, e.g., when certain starting and ending points are near a boundary, thereby requiring the algorithm to detect when a boundary is hit. Boundary detection is typically done by calculating the rate of change of motor speed with time and comparing it to a known predetermined value, e.g., 0 degrees/second. Furthermore, once a boundary is hit, the mirror is typically driven to a default position (such as the origin (0,0) of the mirror movement area) using the same positioning algorithm and, once at the origin, a second attempt is made to drive the mirror to the desired position. Driving to a default position increases the time for the mirror to reach the "memory" position by approximately 2 to 3 seconds, and detecting boundary collisions requires additional complexity of the repositioning algorithm which translates into increased memory space and slower execution time.